# -*- coding: UTF-8 -*-
import abc
# 工厂模式本质上定义一个创建对象的抽象接口，
# 然后通过继续该抽象接口，来实现对此接口的实例化
# 并创建工厂根据用户的行为，调用和实现对应的类，并向用户返回结果。
# 对于用户而言，只需关系输入的值和返回的结果，其中选择哪个类来实现结果，交给了工厂来选择和创建
# 创建Shape抽象类和draw抽象方法
class Shape(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def draw(self):
        pass

# 继承Shape来实现draw方法
class Rectangle(Shape):
    def draw(self):
        print("--Rectangle--")

class  Square(Shape):
    def draw(self):
        print("--Square--")


# 创建工厂，根据用户的信息来进行判断，并实例相应的类。
class ShapeFacory():
    def getShape(self,shapeType):
        if(shapeType == "Rectangle"):
            return Rectangle.draw(self)
        elif(shapeType == "Square"):
            return Shape.draw(self)
        else:
            raise TypeError("%s" %shapeType)

if __name__ == '__main__':
    shape = ShapeFacory()
    try:
         shape.getShape("Rectangle")
    except TypeError:
        print("请输入正确的图形")

